﻿#region SOURCE INFORMATION

//  COPYRIGHT LICENCE
//  
//   Copyright (c) 2011, D.E.M.O.N Organization
//   All rights reserved.
//  
//   Redistribution and use in source and binary forms, with or without modification,
//   are permitted provided that the following conditions are met:
//  
//       * Redistributions of source code must retain the above copyright notice,
//       this list of conditions and the following disclaimer.
//       * Redistributions in binary form must reproduce the above copyright notice,
//       this list of conditions and the following disclaimer in the documentation
//       and/or other materials provided with the distribution.
//       * Neither D.E.M.O.N Organization nor its contributors
//       may be used to endorse or promote products derived from this
//       software without specific prior written permission.
//  
//   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
//   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
//   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
//   DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
//   FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
//   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
//   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
//   CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
//   OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
//   THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//  
//  
//  
//  CODE DESCRIPTION
//  
//         Created by Raistlin.K @ D.E.M.O.N at  10:09 PM  11/03/2012 .
//         E-Mail:                         DemonVK@Gmail.com
//  
//         Project Name:                   MySQLTweaker
//         Module  Name:                   Controller.cs
//         Part Of:                        MySQLTweaker
//         Last Change Date:              10:12 PM 05/04/2012

#endregion

#region

using System;
using System.Diagnostics;
using System.Security.Permissions;

#endregion

namespace MySQLTweaker
{
    public static class Controller
    {
        public static bool RunMySql(string _iPath)
        {
            try
            {
                var p = new Process
                            {
                                StartInfo =
                                    {
                                        WindowStyle = ProcessWindowStyle.Hidden,
                                        Arguments = "--defaults-file=\"" + _iPath + "\\bin\\my.ini\"",
                                        CreateNoWindow = true,
                                        FileName = _iPath + "\\bin\\mysqld.exe"
                                    }
                            };
                try
                {
                    p.Start();
                }
                finally
                {
                    p.Close();
                }
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        [EnvironmentPermission(SecurityAction.LinkDemand, Unrestricted = true)]
        public static bool StopMySql(string _iPath, string _iPort)
        {
            try
            {
                var p = new Process
                            {
                                StartInfo =
                                    {
                                        //WindowStyle = ProcessWindowStyle.Hidden,
                                        Arguments = "--port " + _iPort + " -u root shutdown",
                                        //CreateNoWindow = true,
                                        UseShellExecute = false,
                                        FileName = _iPath + "\\bin\\mysqladmin.exe",
                                        RedirectStandardInput = true,
                                        RedirectStandardOutput = true
                                    }
                            };
                p.Start();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
    }
}